// 封装 axios，做请求处理
import axios from 'axios'
import { ElMessage } from 'element-plus';
import router from '../router';
// 导入token工具类
import { getToken } from './token/index.js'

// 创建axios
const request = axios.create({
    // 请求地址
    baseURL: 'http://localhost:8888/',
    withCredentials: false, //用于配置请求接口跨域时是否需要凭证
    timeout: 30000  // 超时时间，单位毫秒
})

// 配置请求头的参数类型
axios.defaults.headers['Content-Type'] = 'application/json?charset=utf-8'
// 配置请求的拦截器
request.interceptors.request.use((config) => {
    // 在请求头添加token，判断是否需要发送token
    // TODO token应该从pinia中获取
    if(getToken("daocao_token")) {
        config.headers['Daocao-Authorization'] = getToken("daocao_token");
    }
    return config;
},(error) => {
    // 发生异常
    console.log("请求异常==>",error)
    return Promise.reject(error)
})
// 配置响应拦截器
request.interceptors.response.use((response) => {
    // 判断响应码，后端返回的数据 code, data, msg
    let {msg, code} = response.data
    if(code == null) {
        return response
    } else if(code == 200) {
        return response
    } else if(code == 500) {
        ElMessage.error('服务器端异常！')
    } else if(code == 401) {
        ElMessage.error('没有权限操作！')
    } else if(code == 403) {
        ElMessage.error('登录超时！')
        // 需要重新登录，跳转到登录页面，清楚pinia中的数据
        window.sessionStorage.clear();
        router.push('/login')
    } else {
        return Promise.reject(msg)
    }
},(error) => {
    ElMessage.error('error==>', error)
    window.sessionStorage.clear();
    router.push('/login')
    Promise.reject(error)
})

//导出
export default request;